package com.cw.elasticsearch.service;

import java.util.Map;

import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.core.CountResponse;

/**
 * elasticsearch服务
 *
 * @author chenw
 * @date 2020/12/20
 */
public interface ElasticsearchService {

    //索引

    /**
     * 创建索引
     *
     * @param indexName
     * @return
     */
    Boolean createIndex(String indexName);

    /**
     * 创建索引
     *
     * @param indexName
     * @return
     */
    Boolean createIndexTwo(String indexName);

    /**
     * 删除索引
     *
     * @param indexName
     * @return
     */
    Boolean deleteIndex(String indexName);

    /**
     * 判断索引是否存在
     *
     * @param indexName
     */
    Boolean existsIndex(String indexName);

    /**
     * 打开索引
     */
    Boolean openIndex(String indexName);

    /**
     * 获取索引的mapping
     */
    Map<String, Object> getIndexMapping(String indexName);

    /**
     * 获取索引设置
     *
     * @param indexName
     */
    String getIndexSettings(String indexName);

    //文档

    /**
     * 新增文档
     *
     * @param indexName
     * @param id
     * @param json
     * @return
     */
    Boolean insertDocument(String indexName, String id, String json);

    /**
     * 根据id查询文档
     *
     * @param indexName
     * @param id
     * @param includes
     * @param excludes
     * @return
     */
    GetResponse getDocumentById(String indexName, String id, String[] includes, String[] excludes);

    /**
     * 判断文档是否存在
     *
     * @param indexName
     * @param id
     * @return
     */
    Boolean existsDocument(String indexName, String id);

    /**
     * 更新文档
     *
     * @param indexName
     * @param id
     * @param json
     * @return
     */
    UpdateResponse updateDocument(String indexName, String id, String json);

    /**
     * 删除文档
     *
     * @param indexName
     * @param id
     * @return
     */
    DeleteResponse deleteDocument(String indexName, String id);

    /**
     * 搜索文档
     *
     * @param indexName
     * @param name
     * @param text
     * @return
     */
    SearchResponse searchDocument(String indexName, String name, String text);

    /**
     * 搜索文档
     *
     * @param indexName
     * @param name
     * @param text
     * @return
     */
    SearchResponse searchDocumentTwo(String indexName, String name, String text);

    /**
     * 统计文档
     *
     * @param name
     * @param text
     * @return
     */
    CountResponse countSearchDocument(String name, String text);
}
